#pragma once
#include "RenderGraphBuilder.h"
#include "SceneInterface.h"
namespace Alice
{
    class World;
    class PrimitiveSceneInfo;
    class SceneUpdateCommandQueue;
    class FCachedPassMeshDrawList;
    struct FUpdateParameters;
    class Scene: public SceneInterface
    {
    public:
        World*mWorld;
        /** Packed array of primitives in the scene. */
        std::vector<PrimitiveSceneInfo*> mPrimitives;
        SceneUpdateCommandQueue* mSceneUpdateCommandQueue;
        FCachedPassMeshDrawList* mCachedPassMeshDrawList;
        Scene(World*inWorld);
        void Update(RDGBuilder& GraphBuilder, const FUpdateParameters& Parameters);
        void AddPrimitive(PrimitiveComponent* inPrimitiveComponent) override;
        void AddPrimitiveSceneInfo_RenderThread(PrimitiveSceneInfo* PrimitiveSceneInfo);
        World* GetWorld() const override{return mWorld;}
        Scene* GetRenderScene() override
        {
            return this;
        }
        const Scene* GetRenderScene() const override{return this;}
    };
}
